#ifndef ISCENENODE_H
#define ISCENENODE_H

#include "Node.h"
#include "GullError.h"

namespace gull {
    namespace core{

		
        class Scene;
        
        enum nodeType{
            GEOMETRY,
            CAMERA,
            GIZMO,
        };
        
        enum renderPass{
            RENDERPASS_START = 0,
            RENDERPASS_STATIC = RENDERPASS_START,
            RENDERPASS_MOVABLEOBJECTS,
            RENDERPASS_ENVIRONMENT,
			RENDERPASS_CAMERA,
			RENDERPASS_END
        };
        
        class ISceneNode: public Node
        {
        public:
            inline ISceneNode(const char* name, renderPass rp);
			inline ISceneNode(const ISceneNode& node);
            inline nodeType getType() const;
			inline renderPass getRenderPassType() const;
            virtual gullNotification update(Scene* scene) = 0;
            virtual gullNotification preRender(Scene* scene) = 0;
            virtual gullNotification render(Scene* scene) = 0;
            virtual gullNotification postRender(Scene* scene) = 0;
        protected:
             nodeType m_type;
            renderPass m_renderPass;
        private:
        };
        
        nodeType ISceneNode::getType() const{
            return m_type;
        }
		
		
		renderPass ISceneNode::getRenderPassType() const{
            return m_renderPass;
        }
        
        ISceneNode::ISceneNode(const char* name, renderPass rp):
        Node(name),
        m_renderPass(rp)
        {}
		
		ISceneNode::ISceneNode(const ISceneNode& node):
		Node(node.getName()),
		m_renderPass(node.getRenderPassType())
		{}
        
    }
}
#endif